/**
 * 根据格式，获取日期字符串.
 *
 * @param dateTime 日期
 * @param pattern 格式，只支持传yyyy-MM-dd、yyyy-MM-dd HH:mm:ss、yyyy-MM-dd HH:mm
 */
export function format(dateTime, pattern) {
  let month = dateTime.getMonth() + 1;
  let strDate = dateTime.getDate();
  let hours = dateTime.getHours();
  let min = dateTime.getMinutes();
  let sec = dateTime.getSeconds();
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = "0" + strDate;
  }
  if (hours <= 9) {
    hours = "0" + hours;
  }
  if (min <= 9) {
    min = "0" + min;
  }
  if (sec <= 9) {
    sec = "0" + sec;
  }
  let res = "";
  if (pattern === "yyyy-MM-dd") {
    res = dateTime.getFullYear() + "-" + month + "-" + strDate;
  } else if (pattern === "yyyy-MM-dd HH:mm:ss") {
    res =
      dateTime.getFullYear() +
      "-" +
      month +
      "-" +
      strDate +
      " " +
      hours +
      ":" +
      min +
      ":" +
      sec;
  } else if (pattern === "yyyy-MM-dd HH:mm") {
    res =
      dateTime.getFullYear() +
      "-" +
      month +
      "-" +
      strDate +
      " " +
      hours +
      ":" +
      min;
  }

  return res;
}

/**
 * 获取系统当前时间
 * @returns {string}
 */
export function getNowFormatDate() {
  var date = new Date();
  return format(date, "yyyy-MM-dd HH:mm:ss");
}

function registerDateFormat() {
  /** * 对Date的扩展，将 Date 转化为指定格式的String * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)
            可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * (new
            Date()).pattern("yyyy-MM-dd hh:mm:ss.S")==> 2006-07-02 08:09:04.423      
         * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04      
         * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04      
         * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04      
         * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18      
         */

  Date.prototype.datePattern = function(fmt) {
    var o = {
      "M+": this.getMonth() + 1, //月份
      "d+": this.getDate(), //日
      "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时
      "H+": this.getHours(), //小时
      "m+": this.getMinutes(), //分
      "s+": this.getSeconds(), //秒
      "q+": Math.floor((this.getMonth() + 3) / 3), //季度
      S: this.getMilliseconds() //毫秒
    };
    var week = {
      "0": "日",
      "1": "一",
      "2": "二",
      "3": "三",
      "4": "四",
      "5": "五",
      "6": "六"
    };
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        (this.getFullYear() + "").substr(4 - RegExp.$1.length)
      );
    }
    if (/(E+)/.test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        (RegExp.$1.length > 1 ? (RegExp.$1.length > 2 ? "星期" : "周") : "") +
          week[this.getDay() + ""]
      );
    }
    for (var k in o) {
      if (new RegExp("(" + k + ")").test(fmt)) {
        fmt = fmt.replace(
          RegExp.$1,
          RegExp.$1.length == 1
            ? o[k]
            : ("00" + o[k]).substr(("" + o[k]).length)
        );
      }
    }
    return fmt;
  };
}

/**
 * 根据格式，获取日期字符串.
 *
 * @param dateStr 日期字符串 格式为yyyy-MM-dd HH:mm:ss
 * @return  //输出格式2009.3.10 周二 8:09
 */
export function formatWeekDate(dateStr) {
  //注册原型链函数
  if (!Date.prototype.datePattern) {
    registerDateFormat();
  }

  if (!dateStr) {
    return "";
  }
  let date = new Date(dateStr.replace(/-/g, "/"));
  let result = date.datePattern("yyyy-M-d EE H:mm");
  result = result.replace(/-/g, ".");
  return result;
}
